/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-04-19
 * Time: 22:37
 */

import java.util.Arrays;

/**
 * 多机调度问题
 */

public class Solution {

    /**
     *
     * @param works 所有的任务
     * @param machines 机器的数目
     * @return 最短的执行时间
     */

    // 贪心算法
    // 每次都先处理所需时间最长的任务
    private static int greedStrategy(int[] works, int[] machines) {
        // 先将任务排序
        Arrays.sort(works);
        if(works.length <= machines.length){
            // 如果机器的数量比较多, 那么直接就是最长的任务
            return works[works.length - 1];
        }
        // 从所需时间最长的任务开始
        for (int i = works.length - 1; i >= 0 ; i-- ) {
            int machine = 0;
            int time = machines[0];
            // 寻找最先完成的机器
            for (int j = 0; j < machines.length; j++) {
                if(machines[j] < time){
                    machine  = j;
                    time = machines[j];
                }
            }
            // 给它分配当前的所需时间最长的任务
            machines[machine] += works[i];
        }
        // 找出执行的最长时间
        int max = 0;
        for (int i = 0; i < machines.length; i++) {
            max = Math.max(max, machines[i]);
        }
        return max;
    }
}
